package com.data.tructure.array.java基础.二进制运算;

import org.junit.Test;

public class Test20200330 {

    @Test
    public void test() throws Exception {

        int number1 = 1;
        // 那么number1在计算机系统中将表示如下：
        // 00000000  00000000  00000000  00000001
        // 同理可得，number2=-1 时，在二进制中表示如下：
        int number2 = -1;
        // 10000000  00000000  00000000  00000001
    }

    @Test
    public void add() throws Exception {

        // (1) 无符号位相加
        // 例如：1+1 ，在计算机中运算如下：
        int total = 1 + 1;
        // 正数的反码 补码和原码都是一样的
        // 1的补码：00000000  00000000  00000000  00000001
        // 1+1 =
        //       00000000  00000000  00000000  00000001
        //                          +
        //       00000000  00000000  00000000  00000001
        //                          =
        //       00000000  00000000  00000000  00000010
        // 十进制： 0*2^0+1*2^1 = 0+2 = 2

        // (2) 有符号位相加
        // 例如：1-2 ，在计算机中运算如下：
        int total2 = 1 - 2;
        // 1-2 = 1+（-2）
        // 1的补码：00000000  00000000  00000000  00000001
        //-2的原码：10000000  00000000  00000000  00000010
        //-2的补码 = 原码取反+1
        //-2的反码：11111111  11111111  11111111  11111101
        //-2的补码：11111111  11111111  11111111  11111110                          +
        // 1+（-2）=   00000000  00000000  00000000  00000001
        //                            +
        //             11111111  11111111  11111111  11111110
        //                            =
        //             11111111  11111111  11111111  11111111
        // 补码转换成原码： 先转成反码再转成补码
        // 反码：11111111  11111111  11111111  11111110
        // 原码：10000000  00000000  00000000  00000001
        // -1*2^0 = -1

    }

}
